██████╗ ███████╗████████╗██╗██████╗ ███████╗██████╗ ██╗ █████╗
██╔══██╗██╔════╝╚══██╔══╝██║██╔══██╗██╔════╝██╔══██╗██║██╔══██╗
██████╔╝█████╗ ██║ ██║██████╔╝█████╗ ██║ ██║██║███████║
██╔══██╗██╔══╝ ██║ ██║██╔═══╝ ██╔══╝ ██║ ██║██║██╔══██║
██║ ██║███████╗ ██║ ██║██║ ███████╗██████╔╝██║██║ ██║
╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚═════╝ ╚═╝╚═╝ ╚═╝
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Self-hosting
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
Il mwawself-hosting è l'uso di un mwbaprogramma come parte della mwbqtoolchain o del mwbgsistema operativo che produce nuove versioni dello stesso programma—per esempio, un mwbwcompilatore che può compilare il suo stesso mwcacodice sorgente. Il software self-hosting è un luogo comune su mwcqpersonal computermwcgs e sistemi più grandi. Altri programmi che sono tipicamente self-hosting includono kernel, assembly, interpreti a riga di comando e software di controllo versione.
Se un sistema è così nuovo che nessun programma è stato scritto per esso, allora il software è sviluppato su un altro sistema self-hosting e messo su un dispositivo di archiviazione che il nuovo sistema può leggere. Lo sviluppo continua in questo modo finché il nuovo sistema può con affidabilità ospitare il suo stesso sviluppo. Scrivere nuovi strumenti di sviluppo software senza usare un altro sistema di host è raro e in molti casi non pratico.
Contents
• Storia
• Esempi
• Note
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Storia
Il primo compilatore self-hosting (escludendo gli assembler) fu scritto per mwdwLisp da Hart e Levin al MIT nel 1962. Essi scrissero il compilatore Lisp in Lisp, testandolo in un interprete Lisp. Una volta migliorato il compilatore al punto che potesse compilare il suo stesso codice sorgente, esso era self-hosting.
La tecnica è possibile solo quando esiste già un interprete per lo stesso linguaggio che deve essere compilato. Esso si ispira al concetto di eseguire un programma su se stesso come input, il quale è anch'esso usato in varie prove in informatica teoretica, come la prova che il problema della terminazione è indecidibile.
Esempi
Ken Thompson iniziò lo sviluppo su Unix nel 1968 scrivendo e compilando programmi sul GE-635 e portandoli al PDP-7 per testarli. Dopo che kernel Unix iniziale, un interprete a linea di comando, un editor, un assemblatore e alcune utility furono completate, il sistema operativo Unix era in self-hosting: i programmi potevano essere scritti e testati sullo stesso PDP-7.
Lo sviluppo del kernel mwfaLinux era inizialmente ospitato dal sistema mwfqMinix. Una volta che abbastanza pacchetti, come GCC, GNU Bash e altre utility sono state mwfgportate, gli sviluppatori possono lavorare su nuove versioni del kernel di Linux usando una versione precedente dello stesso (ad esempio mwfwcompilare un kernel 3.21 su una macchina con kernel 3.18). Questa procedura può anche essere usata quando si costruisce una nuova distribuzione di Linux da zero.
Molti linguaggi di programmazione hanno avuto implementazioni self-hosting: compilatori che sono in quel linguaggio per quel linguaggio. Questi linguaggi includono mwgqAda, mwggBASIC, mwgwC, mwhaC++cite-ref-1[1] mwiqC# cite-ref-dotnet-2-0[2], mwjgClojureScriptcite-ref-cljs-3-0[3], mwkwCoffeeScript, mwlaDylan, mwlqF#, mwlgFASM, mwlwForth, mwmaGambas, mwmqGo, mwmgHaskell, HolyC, mwmwJava, mwnaLisp, mwnqModula-2, mwngOCaml, mwnwOberon, mwoaPascal, mwoqPython, mwogRust, mwowScala, mwpaSmalltalk, mwpqVala, e mwpgVisual Basic.cite-ref-dotnet-2-1[2]
In alcuni altri casi, l'implementazione iniziale non era self-hosted, ma piuttosto scritta in un altro linguaggio (o perfino in mwralinguaggio macchina); in altri casi, l'implementazione iniziale era sviluppata usando mwrqbootstrapping.
Note
cite-note-11. ↑ gcc 4.8, LLVM/clang
cite-note-dotnet-22. ↑ Mono gmcs and Microsoft Roslyn
cite-note-cljs-33. ↑ mwvamwvqmwvgClojureScript Next, su mwvwswannodette.github.io.
Voci correlate
• Bootstrapping (compilers)
• mwxaCross compiler
• Dogfooding
• mwxwFutamura projection
• mwyqInterprete (informatica)
• mwywSelf reference